<?php
/**
 * Created by PhpStorm.
 * User: shkj
 * Date: 2020/3/7
 * Time: 17:31
 */
namespace app\api\service;
// use app\lib\exception\TokenException;

use think\Exception;
use think\Request;
use think\facade\Cache;
// use app\lib\enum\ScopeEnum;
// use app\lib\exception\ForbiddenException;

use app\api\service\Token as TokenService;
class Token
{
    public static function generateToken(){
        //32个字符组成一组随机字符串
        $randChars = getRandChar(32);
        //用三组字符串，进行md5加密
        $timestamp = $_SERVER['REQUEST_TIME_FLOAT'];
        //salt盐
        $salt = config('secure.token_salt');
        return md5($randChars . $timestamp . $salt);
    }

//     public static function getCurrentTokenVar($key){
//         $token = Request::instance()->header('token');
//         $vars = Cache::get($token);
//         if(!$vars){
//             throw new TokenException();
//         }else {
//             if (!is_array($vars)) {
//                 $vars = json_decode($vars, true);//字符串转数组
//                 return $vars[$key];
//             }
//             else{
//                 throw new Exception('尝试获取的Token变量并不存在');
//             }
//         }
//     }

//     public static function getCurrentUid(){
//         //token
//         $uid = self::getCurrentTokenVar('uid');
//         return $uid;
//     }

//       //用户和CMS管理员都可以访问的权限
//         public static function needPrimaryScope(){
//         $scope = self::getCurrentTokenVar('scope');
//         if($scope) {
//             if ($scope == ScopeEnum::User) {
//                 return true;
//             } else {
//                 throw new ForbiddenException();
//             }
//         }else{
//             throw new TokenException();
//         }
//     }

//     //只有用户才能访问的接口权限
//     public static function needExclusiveScope(){
// //验证初级的权限,在下面接口之前实现这个前置方法
//         $scope = self::getCurrentTokenVar('scope');
//         if($scope) {
//             if ($scope == ScopeEnum::User) {
//                 return true;
//             } else {
//                 throw new ForbiddenException();
//             }
//         }else{
//             throw new TokenException();
//         }
//     }

//     public static function isValidOperate($checkedUID){
//         if(!$checkedUID){
//             throw new Exception('检查UID时必须传入一个被检查的UID');
//         }
//         $currentOperateUID=self::getCurrentUid();
//         if($currentOperateUID == $checkedUID){
//             return true;
//         }else{
//             return false;
//         }
//     }

    public static function verifyToken($uid,$token)
    {//接收客户端传来的token的值
      $exist = Cache::get($uid);//判断是否还在缓存里面
      $exist = json_decode($exist,true);//转数组
      
        if($exist && $exist['token'] = $token){
            return true;
        }else{
            return false;
        }
    }

}